#include <stdlib.h>
#include <string.h>
#include <iostream>

using std::cout;
using std::endl;

//内存泄漏？内存踩踏？踩内存？野指针？（查一查）

//面试题
//malloc/free与new/delete异同点？
//Q：相同点
//A:1、都是用来申请堆空间的
//2、都是需要进行成对出现(malloc/free，new/delete)，否则会产生
//内存泄漏
//
//Q:不同点
//A:1、malloc/free是属于C语言中的库函数，而new/delete是属于C++
//中的表达式
//2、malloc申请的空间是原始的未初始化的，而new申请的空间是初始化

void test()
{
    int *pInt= (int *)malloc(sizeof(int));//1、申请空间
    memset(pInt, 0, sizeof(int));//2、初始化（清零）
    *pInt = 10;//3、操作(赋值)
    //...
    free(pInt);//4、回收空间
    pInt = nullptr;//5、防止野指针

    //申请堆空间数组
    int *pArray = (int *)malloc(sizeof(int) * 10);//1、申请空间
    memset(pArray, 0, sizeof(int) * 10);//2、初始化（清零）
    pArray[0] = 10;
    pArray[1] = 20;

    free(pArray);//4、回收空间
    pArray = nullptr;//5、防止野指针
}

void test2()
{
    int *pInt = new int(10);//1、申请空间，然后初始化，并且赋值
    //...
    
    delete pInt;//2、回收空间
    pInt = nullptr;//3、防止野指针
    
    //申请堆空间数组
    int *pArray = new int[10]();

    pArray[0] = 10;
    pArray[1] = 20;

    delete [] pArray;//回收堆空间
    pArray = nullptr;//防止野指针

}

int main(int argc, char **argv)
{
    test();
    return 0;
}

